1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Brauche Hilfe bezüglich Http-Post und JSON

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von korndi, 24.01.2011.

  1. korndi, 24.01.2011 #1
    korndi

    korndi Threadstarter Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    3
    Registriert seit:
    18.10.2010
    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
     
  2. SeraphimSerapis, 25.01.2011 #2
    SeraphimSerapis

    SeraphimSerapis Android-Guru

    Beiträge:
    3,072
    Erhaltene Danke:
    1,138
    Registriert seit:
    27.02.2009
    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 ;)
     
  3. korndi, 25.01.2011 #3
    korndi

    korndi Threadstarter Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    3
    Registriert seit:
    18.10.2010
    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
     
  4. rushzero, 26.01.2011 #4
    rushzero

    rushzero Erfahrener Benutzer

    Beiträge:
    171
    Erhaltene Danke:
    36
    Registriert seit:
    20.10.2010
    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());
    				}
    		    	
    
    				
    			}
    
    }
    
     

Diese Seite empfehlen