2017-04-11 184 views
-2
package demo.chv.bhudev.chvlogin; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.UnsupportedEncodingException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.URLEncoder; 

public class MainActivity extends AppCompatActivity { 
TextView content; 
EditText login, pass; 
String Login, Pass; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    login  = (EditText)findViewById(R.id.txt_box_usr); 
    pass  = (EditText)findViewById(R.id.txt_box_pwd); 
    content = (TextView)findViewById(R.id.txt_content); 

    Button save = (Button)findViewById(R.id.btn_login); 
    save.setOnClickListener(new Button.OnClickListener(){ 

     @Override 
     public void onClick(View v) 
     { 
      try{ 
       // CALL GetText method to make post method call 
       GetText(); 
      } 
      catch(Exception ex) 
      { 
       content.setText(ex.getMessage()); 
      } 
     } 
    }); 
} 

private void GetText() throws UnsupportedEncodingException{ 
    Login = login.getText().toString(); 
    Pass = pass.getText().toString(); 

    Toast.makeText(this,"Started",Toast.LENGTH_LONG).show(); 
    String data = URLEncoder.encode("username", "UTF-8") 
      + "=" + URLEncoder.encode(Login, "UTF-8"); 

    data += "&" + URLEncoder.encode("password", "UTF-8") + "=" 
      + URLEncoder.encode(Pass, "UTF-8"); 

    String text = ""; 
    try{ 
     URL url = new URL("mylink"); 
     URLConnection conn = url.openConnection(); 

     conn.setDoOutput(true); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
     wr.write(data); 
     wr.flush(); 

     StringBuilder sb = new StringBuilder(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while ((text = reader.readLine()) != null){ 
      sb.append(text); 
      break; 
     } 
     content.setText(sb); 
    }catch(Exception r) { Toast.makeText(this,r.getMessage().toString(),Toast.LENGTH_LONG).show(); 
    } 
} 
} 

对于上面的代码,我收到异常“尝试调用空对象引用上的虚拟方法'java.lang.String java.lang.toString()'”。Android:发送/接收数据

我试过/在网上搜索很多东西,但无法找到解决方案。

+0

对wh ich线你得到这个异常? – Lokesh

+0

请添加您的完整活动代码。 –

+0

也粘贴你的logcat – Lokesh

回答

0

更改下面的代码错误:

Toast.makeText(this,r.getMessage().toString(),Toast.LENGTH_LONG).show(); 

Toast.makeText(this,r.getMessage(),Toast.LENGTH_LONG).show(); 

以下是GetMessage函数的Oracle文档中介绍:

的getMessage

public String getMessage() 

Returns the detail message string of this throwable. 
Returns:the detail message string of this Throwable instance (which may be null). 

因此,你可能会得到空

此外,下面的代码改变:

Login = login.getText().toString(); 
Pass = pass.getText().toString(); 

到:

if(login.getText()!=null) 
    Login = login.getText().toString(); 
if(pass.getText()!=null) 
     Pass = pass.getText().toString(); 
0

在运行此方法之前,您的登录名或传递对象(我认为它是edittext视图)并未初始化。这给了 “关于空对象引用”

0

您需要设置的请求方法键入您的电话像POST或GET call so try

urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setDoOutput(true); 
    urlConnection.setRequestMethod("POST"); 
    urlConnection.setRequestProperty("Authorization", "Basic " + base64Encoded); 
    urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); 
    PrintWriter out = new PrintWriter(urlConnection.getOutputStream()); 
    out.print(_param); 
    out.close(); 

    int statusCode = urlConnection.getResponseCode(); 

    if (statusCode == 200) { 
     inputStream = new BufferedInputStream(urlConnection.getInputStream()); 

     try { 
      sb = new StringBuilder(); 
      BufferedReader r = new BufferedReader(new InputStreamReader(
        _instream)); 
      for (String line = r.readLine(); line != null; line = r.readLine()) { 
       sb.append(line); 
      } 

      _instream.close(); 

     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 
     // sb.toString() use where you want 
    }