Brauche Hilfe bezüglich Http-Post und JSON

  • 3 Antworten
  • Neuester Beitrag
Diskutiere Brauche Hilfe bezüglich Http-Post und JSON im Android App Entwicklung im Bereich Betriebssysteme & Apps.
K

korndi

Neues Mitglied
Hallo!!

Ich habe schon seit längeren Probleme mit Http-Post und Json.

Deshalb möchte ich euch fragen ob sich jemand zeit nehmen kann(geht nur um den Login).

Das ganze hier reinzustellen ist zu langwierig.

Danke im Vorraus
 
SeraphimSerapis

SeraphimSerapis

Lexikon
Sorry, aber ich glaube die meisten haben auch keine X-Stunden Zeit um ein Projekt mitzubetreuen ;)

Entweder du schmeißt wie die anderen deinen Code hier rein, oder du lässt es ;)
 
K

korndi

Neues Mitglied
Ok werde es versuchen:

Main Klasse

Code:
public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
       startActivityForResult(new Intent(Main.this, Login.class), 1);

    }
}
Login Klasse:


Code:
public class Login extends Activity{
	ProgressDialog pd = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		
		final EditText user = (EditText)findViewById(R.id.login_etuser);
		final EditText pw = (EditText)findViewById(R.id.login_etpw);
		Button btlogin = (Button)findViewById(R.id.login_btlog);
		final Thread thread = new Thread (){
			public void run() {
				try
				{
				String result = "";
				result = postData(user.getText().toString(),pw.getText().toString());
				if (result != null)
				{
					final JSONObject jObject = new JSONObject(result);
		            JSONObject menuObject = jObject.getJSONObject("responseData");
			    	Log.e("PPP", menuObject.getString("session_id"));
				}
                

		    	//pd.dismiss();
				}
				catch (Exception e)
				{
					Log.e("XXX", e.getMessage());
				}
		    	

				
			};
		};
		
		btlogin.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				if (!user.getText().toString().equals("") && !pw.getText().toString().equals(""))
				{
					
					thread.start();
					
				}
				
			}
		});
	}
	public String postData(final String user, final String pw) {
	    // Create a new HttpClient and Post Header
	    HttpClient httpclient = new DefaultHttpClient();
	    HttpPost httppost = new HttpPost("http://surfkid.redio.de/login");
	    String result;
	    BufferedReader in = null;

	    try {
	        // Add your data
	        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
	        nameValuePairs.add(new BasicNameValuePair("username", user));
	        nameValuePairs.add(new BasicNameValuePair("password", md5(pw)));
	        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

	        // Execute HTTP Post Request
	        HttpResponse response = httpclient.execute(httppost);
	        if(response != null){
	        	in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
	            
	            StringBuffer sb = new StringBuffer("");
	            String line = "";
	            String NL = System.getProperty("line.separator");
	            while ((line = in.readLine()) != null) {
	                sb.append(line + NL);
	            }
	            in.close();
	            
	            result = sb.toString();
	            return result;
	          }
	        
	    } catch (ClientProtocolException e) {
	    	 Log.e("xxx", e.getMessage());
	    } catch (IOException e) {
	        Log.e("xxx2", e.getMessage());
	    }
	    return null;
	}
	 private String md5(String in) {
    	 
	        MessageDigest digest;
	 
	        try {
	 
	            digest = MessageDigest.getInstance("MD5");
	 
	            digest.reset();        
	 
	            digest.update(in.getBytes());
	 
	            byte[] a = digest.digest();
	 
	            int len = a.length;
	 
	            StringBuilder sb = new StringBuilder(len << 1);
	 
	            for (int i = 0; i < len; i++) {
	 
	                sb.append(Character.forDigit((a[i] & 0xf0) >> 4, 16));
	 
	                sb.append(Character.forDigit(a[i] & 0x0f, 16));
	 
	            }
	 
	            return sb.toString();
	 
	        } catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
	 
	        return null;
	 
	    }



}

LogCat:

01-25 10:11:01.891: ERROR/AndroidRuntime(15145): FATAL EXCEPTION: main
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): java.lang.IllegalThreadStateException: Thread already started.
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at java.lang.Thread.start(Thread.java:1322)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.skiptvad.Login$2.onClick(Login.java:79)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.view.View.performClick(View.java:2461)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.view.View$PerformClick.run(View.java:8888)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.os.Handler.handleCallback(Handler.java:587)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.os.Looper.loop(Looper.java:123)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at java.lang.reflect.Method.invoke(Method.java:521)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at dalvik.system.NativeStart.main(Native Method)

[/code]


Das Problem ist wenn ich mein Programm zum zweiten mal starte kommt die thread exception da der thread schon läuft. Es ist mir klar das ich einen Thread in Java nur einmal starten kann. Jedoch weiß ich keine Lösung dafür.

MFG
 
rushzero

rushzero

Fortgeschrittenes Mitglied
Wenn ein Thread einmal beendet(Wird ein Interrupt Flag gesetzt) ist kannst du ihn nicht einfach wieder mit .start() starten.
Du musst ihn mit new neu initialisieren.
Es wird dir helfen alles mit Runnable zu implementieren so z.b (ungetestet und im Notepad geschrieben):

Code:
protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		
		final EditText user = (EditText)findViewById(R.id.login_etuser);
		final EditText pw = (EditText)findViewById(R.id.login_etpw);
		Button btlogin = (Button)findViewById(R.id.login_btlog);
		MyRunnable myRunnable = new MyRunnable();
		myRunnable.set..
		
		final Thread thread = new Thread (myRunnable)
		
		btlogin.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				if (!user.getText().toString().equals("") && !pw.getText().toString().equals(""))
				{
					if(thread != null && thread.isInterrupted()){
						thread = new Thread(myRunnable);
					}
					thread.start();
					
				}
				
			}
		});
	}

class MyRunnable implements Runnable
{

			//SETTER
			setUserBlabla(String){}


			public void run() {
				try
				{
				String result = "";
				result = postData(user.getText().toString(),pw.getText().toString());
				if (result != null)
				{
					final JSONObject jObject = new JSONObject(result);
		            JSONObject menuObject = jObject.getJSONObject("responseData");
			    	Log.e("PPP", menuObject.getString("session_id"));
				}
                

		    	//pd.dismiss();
				}
				catch (Exception e)
				{
					Log.e("XXX", e.getMessage());
				}
		    	

				
			}

}
 
Ähnliche Themen - Brauche Hilfe bezüglich Http-Post und JSON Antworten Datum
16