1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  1. korndi, 24.01.2011 #1
    korndi

    korndi Threadstarter Junior 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
     
  2. SeraphimSerapis, 25.01.2011 #2
    SeraphimSerapis

    SeraphimSerapis Android-Guru

    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

    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

    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());
    				}
    		    	
    
    				
    			}
    
    }