mboost-dp1
Java problem 1: commandline check
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg har en metode som skal skrive en commando til "commando linien" i android.
Mit problem er at jeg mangler en måde at tjekke om der kommer noget tilbage som svar på mit input..
som det er nu, fortæller jeg min metode om jeg forventer et output , men selvom jeg forventer det, kan der jo godt gå noget galt så der intet kommer ud..
Så, er der nogen der har en ide til hvordan jeg kan lave et tjek, så readLine() ikke kommer til at hænge hvis noget går galt og der ikke kommer et output.
*NOTE, readLine() venter (forevigt) på at der kommer noget, hvilket der jå åbenlyst ikke altid gør efter en indtastning i commandolinien...
Kode:
Mit problem er at jeg mangler en måde at tjekke om der kommer noget tilbage som svar på mit input..
som det er nu, fortæller jeg min metode om jeg forventer et output , men selvom jeg forventer det, kan der jo godt gå noget galt så der intet kommer ud..
Så, er der nogen der har en ide til hvordan jeg kan lave et tjek, så readLine() ikke kommer til at hænge hvis noget går galt og der ikke kommer et output.
*NOTE, readLine() venter (forevigt) på at der kommer noget, hvilket der jå åbenlyst ikke altid gør efter en indtastning i commandolinien...
Kode:
package rose.mymedic2.connectiontoggle;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import android.util.Log;
public class RunCommand {
/**
* @param Command
* To be run as super user.
* @param ExpectOutput
* Expects no output if false. If true, this method expects
* output.
* @return
*/
public static String RunSuperUserCommand(String Command) {
return RunSuperUserCommand(Command, false);
}
public static String RunSuperUserCommand(String Command, boolean ExpectOutput) {
Process suProcess;
DataInputStream osRes;
DataOutputStream os;
ExpectOutput = false;
String Output = null;
try {
suProcess = Runtime.getRuntime().exec("su");
os = new DataOutputStream(suProcess.getOutputStream());
osRes = new DataInputStream(suProcess.getInputStream());
if (null != os && null != osRes) {
// running the command.
os.writeBytes(Command + "\n");
os.flush();
if (ExpectOutput) {
Output = osRes.readLine();
}
os.writeBytes("exit\n");
os.flush();
}
} catch (Exception e) {
Log.d( Command ,"Error [" + e.getClass().getName() + "] : "
+ e.getMessage());
}
return Output;
}
}
#12
Det er en løsning som kun virker hvis kommandoen genererer output og den naar at blive laest ind i buffer inden du kalder available.
Ikke specielt robust.
Og generelt er available en noget tvivlsom metode. Hvis der er noget i buffer, saa er det nyttigt at vide. Men hvis der ikke er noget i buffer, så kan man ikke bruge det til meget.
Det er en løsning som kun virker hvis kommandoen genererer output og den naar at blive laest ind i buffer inden du kalder available.
Ikke specielt robust.
Og generelt er available en noget tvivlsom metode. Hvis der er noget i buffer, saa er det nyttigt at vide. Men hvis der ikke er noget i buffer, så kan man ikke bruge det til meget.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.