2017-02-23 11 views
2

Я пытаюсь указать Toast значение, которое находится на моем сервере. Я использую php-файл для извлечения на сервер. К сожалению, приложение закрывается. Я совершенно смущен, что может быть причиной?Подключение к серверу, к сожалению, ошибка

Основное мое вид деятельности package com.примерный андроид. Баланс;

import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.HashMap; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private Context mContext; 
    private Common mApp; 
    private Button get; 
    private EditText user; 
    private HashMap<String, String> sData; 
    private String usr_id, balance, s; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    get = (Button) findViewById(R.id.but); 
    user = (EditText) findViewById(R.id.text); 

    //usr_id = user.getText().toString(); 

    /*get.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (user.getText().toString().length()== 0){ 
       user.setError("Enter your user Id"); 
       user.requestFocus(); 
      }else { 
       //new Getbalance(mContext,usr_id).execute(); 
       Toast.makeText(mContext, usr_id, Toast.LENGTH_SHORT).show(); 
      } 
     } 
    });*/ 

    get.setOnClickListener(this); 

} 

@Override 
public void onClick(View view) { 

    if (user.getText().toString().length() == 0) { 
     user.setError("Enter your user Id"); 
     user.requestFocus(); 
    } else { 
     //Toast.makeText(MainActivity.this, user.getText().toString(), Toast.LENGTH_SHORT).show(); 
     // new Getbalance(MainActivity.this,user).execute(); 
     new Getbal().execute(); 
    } 
} 

private class Getbal extends AsyncTask<String, String, String> { 

    String userid = user.getText().toString(); 


    @Override 
    protected String doInBackground(String... strings) { 
     sData = new HashMap<String, String>(); 
     sData.put("user", userid); 
     try { 
      JSONObject json = Connection.UrlConnection(php.bal, sData); 
      int suc = json.getInt("success"); 

      if (suc == 0) { 


      } else { 
       JSONArray jsonArray = json.getJSONArray("balance"); 
       JSONObject child = jsonArray.getJSONObject(0); 

       String bal = child.optString("balance"); 
       balance = bal; 

       s = "true"; 

      } 

     } catch (JSONException e) { 
     } 

     return s; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     if (s.equalsIgnoreCase("true")) { 
      Toast.makeText(MainActivity.this, balance, Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 
} 

мой файл соединения

package com.example.android.balance; 

    import android.util.Log; 

    import org.json.JSONException; 
    import org.json.JSONObject; 

    import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.io.InputStreamReader; 
    import java.io.OutputStream; 
    import java.io.OutputStreamWriter; 
    import java.io.UnsupportedEncodingException; 
    import java.net.HttpURLConnection; 
    import java.net.MalformedURLException; 
    import java.net.URL; 
    import java.net.URLEncoder; 
    import java.util.HashMap; 
    import java.util.Map; 



public class Connection { 
private static InputStream is = null; 
private static JSONObject jsonObj = null; 
private static String json = null; 
private static HttpURLConnection urlConnection; 


    public Connection() { 
} 

    public static JSONObject UrlConnection(String url, HashMap<String, String> data) { 

    try { 
     URL link = new URL(url); 
     urlConnection = (HttpURLConnection) link.openConnection(); 
     urlConnection.setReadTimeout(10000); 
     urlConnection.setConnectTimeout(7000); 
     urlConnection.setRequestMethod("POST"); 
     urlConnection.setDoInput(true); 
     urlConnection.setDoOutput(true); 
     OutputStream os = urlConnection.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(
       new OutputStreamWriter(os, "UTF-8")); 
     writer.write(getQuery(data)); 
     writer.flush(); 
     writer.close(); 
     os.close(); 
     urlConnection.connect(); 
     is = urlConnection.getInputStream(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     json = sb.toString(); 
     Log.d("Buffer json : ", json); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 

    // try parse the string to a JSON object 
    try { 
     jsonObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    return jsonObj; 
} 

private static String getQuery(HashMap<String, String> data) throws UnsupportedEncodingException { 
    StringBuilder result = new StringBuilder(); 
    boolean first = true; 

    for (Map.Entry<String, String> entry : data.entrySet()) { 
     if (first) 
      first = false; 
     else 
      result.append("&"); 

     result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
     result.append("="); 
     result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); 
    } 

    return result.toString(); 
} 
} 

журнал ошибок

02-23 11:42:23.841 21899-21944/com.example.android.balance E/Buffer Error: Error converting result java.lang.NullPointerException: lock == null 
    02-23 11:42:23.845 21899-21942/com.example.android.balance D/Surface: Surface::setBuffersDimensions(this=0xb45a6e00,w=720,h=1280) 
    02-23 11:42:23.852 21899-21944/com.example.android.balance E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 
    Process: com.example.android.balance, PID: 21899 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:304) 
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
    at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 
    at org.json.JSONTokener.nextValue(JSONTokener.java:94) 
    at org.json.JSONObject.<init>(JSONObject.java:156) 
    at org.json.JSONObject.<init>(JSONObject.java:173) 
    at com.example.android.balance.Connection.UrlConnection(Connection.java:80) 
    at com.example.android.balance.MainActivity$Getbal.doInBackground(MainActivity.java:77) 
    at com.example.android.balance.MainActivity$Getbal.doInBackground(MainActivity.java:67) 
    at android.os.AsyncTask$2.call(AsyncTask.java:292) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
    at java.lang.Thread.run(Thread.java:818)  

мой файл PHP, который используется для извлечения в базе данных

<?php 
    if(isset($_POST["user"])) 
    { 
    $x2=$_POST["user"]; 

    $response['balance']=array(); 

    $data=Array('LOGINUSER' => 'voixmeapi', 
     'LOGINSECRET' => sha1('112233'), 
     'SECTION' => 'SUBSCRIBER', 
     'ACTION' => 'GETBALANCE', 
     'DATA'=>Array('SUBSCRIBERID'=>$x2)); 
    $url_send ="http://134.119.216.77/api/api.php"; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url_send); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,'request='.json_encode($data)); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $server_output = curl_exec ($ch); 
    curl_close ($ch); 
//print_r($server_output); 


$test=(explode("{",$server_output)); 
//print_r($test); 
$test1=(explode("CREDIT",$test[2])); 
$test2=(explode(",",$test1[1])); 
$test3=(explode(":",$test2[0]));//success 
$test4=ltrim($test3[1],'"'); 
//print_r($payment); 
$balance=trim($test4,'"'); 
array_push($response["balance"],$balance); 
$response['success']=1; 
echo json_encode($response); 

} 
else{ 
    $response['msg']='No data post'; 
    $response['success']=0; 
    echo json_encode($response); 
} 
?> 

php.java

package com.example.android.balance.parser; 


public class php { 

    public static final String bal="http://voix-me.com/android/GetBal.php" ; 
    } 

При запуске php-файла в браузере он работает правильно.

+1

Возможно дубликат [Что такое NullPointerException, и как это исправить?] (HTTP: //stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it). – 0xDEADC0DE

+0

проверить мои edit.I есть строка, которая является ссылкой на мой файл php для доступа. –

+0

выглядит как JSON, который вы получаете, как-то недействителен. Попробуйте проверить, что вы на самом деле получаете с сервера. –

ответ

1

было бы из-за в правильном файле подключения Java см db connection

java.util.Map map = con.getTypeMap(); 
map.put("mySchemaName.ATHLETES", Class.forName("Athletes")); 
con.setTypeMap(map); 

может быть полезным

Смежные вопросы