2014-09-30 77 views
-4

我正在做一個登錄頁面,並具有以下代碼如下。當我打開此代碼正確的方法來實現android中的onclick按鈕

// Login button clicked 
       // ok = (Button)findViewById(R.id.btn_login); 
       // ok.setOnClickListener((android.view.View.OnClickListener) this); 

我的應用程序崩潰。我看最經常使用這種方法公共類MainActivity擴展ActionBarActivity實現OnClickListener,所以我跟着。當點擊按鈕登錄來調用發佈數據時,啓用什麼正確的方法?

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import android.support.v7.app.ActionBarActivity; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends ActionBarActivity implements OnClickListener { 

    Button ok,back,exit; 
    TextView result; 

     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.login); 

      // Login button clicked 
      // ok = (Button)findViewById(R.id.btn_login); 
      // ok.setOnClickListener((android.view.View.OnClickListener) this); 

      result = (TextView)findViewById(R.id.lbl_result); 

     } 

     public void postLoginData() { 
      // Create a new HttpClient and Post Header 
      HttpClient httpclient = new DefaultHttpClient(); 

      /* login.php returns true if username and password is equal to saranga */ 
      HttpPost httppost = new HttpPost("http://www.sencide.com/blog/login.php"); 

      try { 
       // Add user name and password 
      EditText uname = (EditText)findViewById(R.id.txt_username); 
      String username = uname.getText().toString(); 

      EditText pword = (EditText)findViewById(R.id.txt_password); 
      String password = pword.getText().toString(); 

       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("username", username)); 
       nameValuePairs.add(new BasicNameValuePair("password", password)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       Log.w("SENCIDE", "Execute HTTP Post Request"); 
       HttpResponse response = httpclient.execute(httppost); 

       String str = inputStreamToString(response.getEntity().getContent()).toString(); 
       Log.w("SENCIDE", str); 

       if(str.toString().equalsIgnoreCase("true")) 
       { 
       Log.w("SENCIDE", "TRUE"); 
       result.setText("Login successful"); 
       }else 
       { 
       Log.w("SENCIDE", "FALSE"); 
       result.setText(str);    
       } 

      } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
      } catch (IOException e) { 
      e.printStackTrace(); 
      } 
     } 

     private StringBuilder inputStreamToString(InputStream is) { 
     String line = ""; 
     StringBuilder total = new StringBuilder(); 
     // Wrap a BufferedReader around the InputStream 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
     // Read response until the end 
     try { 
      while ((line = rd.readLine()) != null) { 
      total.append(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // Return full string 
     return total; 
     } 

     public void onClick(View view) { 
      if(view == ok){ 
      postLoginData(); 
      } 
     } 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

     } 


} 

下面是一些錯誤我當我嘗試用onclick事件運行我的應用程序

09-30 01:58:01.075: E/AndroidRuntime(1342): FATAL EXCEPTION: main 
09-30 01:58:01.075: E/AndroidRuntime(1342): Process: com.example.guard1, PID: 1342 
09-30 01:58:01.075: E/AndroidRuntime(1342): android.os.NetworkOnMainThreadException 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at com.example.guard1.MainActivity.postLoginData(MainActivity.java:72) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at com.example.guard1.MainActivity.onClick(MainActivity.java:113) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at android.view.View.performClick(View.java:4438) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at android.view.View$PerformClick.run(View.java:18422) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at android.os.Handler.handleCallback(Handler.java:733) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at android.os.Handler.dispatchMessage(Handler.java:95) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at android.os.Looper.loop(Looper.java:136) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-30 01:58:01.075: E/AndroidRuntime(1342):  at dalvik.system.NativeStart.main(Native Method) 
+1

發佈您的logcat。 – 2014-09-30 05:34:24

+0

什麼是錯誤? – 2014-09-30 05:35:45

+0

您可以將'ok.setOnClickListener((android.view.View.OnClickListener)this)'簡化爲'ok.setOnClickListener(this)'。如果此更改未編譯,則不必要的轉換將不能解決問題。 – 2014-09-30 05:37:01

回答

5

刪除此導入

import android.content.DialogInterface.OnClickListener; 

並添加此導入

import android.view.View.OnClickListener; 
+0

我需要了解這個ok.setOnClickListener(this)怎麼樣;鏈接到無效onClick(查看視圖)? – user3953386 2014-09-30 05:43:50

+0

實際上它稱爲你的界面onclick方法,當你添加這個,然後刪除包括onclick並覆蓋新1 – 2014-09-30 05:45:12

+0

我不明白你說的時候刪除包括onclick並覆蓋新1? – user3953386 2014-09-30 05:51:20

0

您可以使用

ok.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     ... 
    } 
}); 

,並添加

import android.view.View; 

或只需更換

import android.content.DialogInterface.OnClickListener; 

import android.view.View.OnClickListener; 
0

先導入包

import android.view.View.OnClickListener; 

取而代之的是:

ok.setOnClickListener((android.view.View.OnClickListener) this); 

試試這個:

ok.setOnClickListener(this); 

如果你刪除工具方法的活動 那麼你可以,而不是直接使用這個

ok.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO 

      } 
     }); 

的這ok.setOnClickListener(this);

0

使用OnClickListener。

ok.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
    ... 
}}); 

onClick回調在主線程中工作,這就是爲什麼你有異常。使用後臺線程進行網絡交互。裝載機 - 這是很好的Android解決方案: http://developer.android.com/guide/components/loaders.html

相關問題