PHP 및 JSON 파일을 사용하여 MYSQL을 Android 응용 프로그램과 연결하려고 시도하고 있는데, 현재 직면하고있는 문제는 JSONParser 클래스가 항상 null을 반환한다는 것입니다. JSON 파일을 볼 수 있고 유효하기 때문에 이유를 모르겠습니다.
내 코드에는 두 가지 예외가 있습니다. 첫 번째는 다음과 같습니다.
12-08 09:17:43.486 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from GradienCache
12-08 09:17:43.498 29666-29666/alharbi.astrong texttheer.gym_managment_system E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384
12-08 09:17:43.518 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
12-08 09:17:43.522 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384
두 번째는 다음과 같습니다.
12-08 09:17:46.526 29666-29740/alharbi.atheer.gym_managment_system E/Buffer Error: Error converting result java.lang.NullPointerException: lock == null
12-08 09:17:46.526 29666-29740/alharbi.atheer.gym_managment_system E/JSON Parser: Error parsing data org.json.JSONException: End of input at character 0 of
이것은 문제를 포함하는 클래스입니다
public class ViewInfo extends AppCompatActivity {
JSONParser jsonParser;
ProgressDialog progressDialog;
int value;
String[] names,emails,levels,ids, weights,hieghts,genders,bds,addresses,ages,phones;
ListView listView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_info);
jsonParser=new JSONParser();
listView2=(ListView)findViewById(R.id.listView2);
new DisplayViewInfo().execute();
}
class DisplayViewInfo extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog=new ProgressDialog(ViewInfo.this);
progressDialog.setTitle("Wait...");
progressDialog.show();
}
@Override
protected String doInBackground(String... strings) {
List<NameValuePair> list= new ArrayList<NameValuePair>();
// HashMap<String,String> list = new HashMap<>();
// jsonObject=jsonParser.makeHttpRequest("http://192.168.56.1/myapp/ViewInfo.php","POST",list);
JSONObject jsonObject=jsonParser.makeHttpRequest("http://192.168.56.1/myapp/ViewInfo.php", "POST", list);
try{
if(jsonObject!=null && !jsonObject.isNull("value")){
value=jsonObject.getInt("value");
JSONArray jsonArray=jsonObject.getJSONArray("Customers");
names=new String[jsonArray.length()];
emails=new String[jsonArray.length()];
phones=new String[jsonArray.length()];
ids=new String[jsonArray.length()];
weights=new String[jsonArray.length()];
hieghts=new String[jsonArray.length()];
genders=new String[jsonArray.length()];
levels=new String[jsonArray.length()];
ages=new String[jsonArray.length()];
addresses=new String[jsonArray.length()];
bds=new String[jsonArray.length()];
for(int i=0;i<jsonArray.length();i++){
JSONObject objcet=jsonArray.getJSONObject(i);
ids[i]=objcet.getString("Customer_ID");
names[i]=objcet.getString("Name");
emails[i]=objcet.getString("Email");
phones[i]=objcet.getString("Phone_number");
weights[i]=objcet.getString("Weight");
hieghts[i]=objcet.getString("Height");
genders[i]=objcet.getString("Gender");
levels[i]=objcet.getString("Level");
ages[i]=objcet.getString("age");
addresses[i]=objcet.getString("address");
bds[i]=objcet.getString("Date_of_birth");
}
}else{
value=0;
}
}catch (Exception e){
Log.d("ERROR", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(value==1){
Toast.makeText(getApplicationContext(), "Done...", Toast.LENGTH_LONG).show();
ArrayAdapter<String> adapter=new ArrayAdapter<String>(ViewInfo.this,android.R.layout.simple_list_item_1,android.R.id.text1,names);
listView2.setAdapter(adapter);
}else if(value==0)
Toast.makeText(getApplicationContext(),"Error...",Toast.LENGTH_LONG).show();
else Toast.makeText(getApplicationContext(),"OUT...",Toast.LENGTH_LONG).show();
progressDialog.dismiss();
}
}
}
이것은 내 JSON 파서입니다.
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method.equals("POST")){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method.equals("GET")){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
//e.printStackTrace();
} catch (ClientProtocolException 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();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
누구든지 나를 도울 수 있습니까? 이 오류 때문에 며칠 동안 걸림돌이되었습니다.
JSON 오류의 모양에서 보면 유효한 응답을받지 못하는 것 같고 응답 문자열이 비어 있습니다. 이런 일이 발생하면 일반적으로 웹 서비스 호출의 html 응답 코드와 빌드 후 실제 문자열을 모두 확인합니다. 이것은 웹 서비스가 문제인지 또는 웹 서비스 호출이 문제인지 식별하는 데 도움이됩니다.
제가 언급해야 할 또 다른 사항은 웹 호출에 더 이상 사용되지 않는 코드를 사용하고 있다는 것입니다. 아파치 http 코드는 Android 프레임 워크에서 제거되었으므로 HttpURLConnection
대신 웹 서비스 호출에을 사용해야합니다 .
저는 오늘 기분이 꽤 좋으며 도움이 되었으니이 JSON 응답을 얻기 위해 사용해야하는 코드를 알려 드리겠습니다. :)
//The JSON we will get back as a response from the server
JSONObject jsonResponse = null;
//Http connections and data streams
URL url;
HttpURLConnection httpURLConnection = null;
OutputStreamWriter outputStreamWriter = null;
try {
//open connection to the server
url = new URL("your_url_to_web_service");
httpURLConnection = (HttpURLConnection) url.openConnection();
//set request properties
httpURLConnection.setDoOutput(true); //defaults request method to POST
httpURLConnection.setDoInput(true); //allow input to this HttpURLConnection
httpURLConnection.setRequestProperty("Content-Type", "application/json"); //header params
httpURLConnection.setRequestProperty("Accept", "application/json"); //header params
httpURLConnection.setFixedLengthStreamingMode(jsonToSend.toString().getBytes().length); //header param "content-length"
//open output stream and POST our JSON data to server
outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream());
outputStreamWriter.write(jsonToSend.toString());
outputStreamWriter.flush(); //flush the stream when we're finished writing to make sure all bytes get to their destination
//prepare input buffer and get the http response from server
StringBuilder stringBuilder = new StringBuilder();
int responseCode = httpURLConnection.getResponseCode();
//Check to make sure we got a valid status response from the server,
//then get the server JSON response if we did.
if(responseCode == HttpURLConnection.HTTP_OK) {
//read in each line of the response to the input buffer
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"utf-8"));
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
bufferedReader.close(); //close out the input stream
try {
//Copy the JSON response to a local JSONObject
jsonResponse = new JSONObject(stringBuilder.toString());
} catch (JSONException je) {
je.printStackTrace();
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
if(httpURLConnection != null) {
httpURLConnection.disconnect(); //close out our http connection
}
if(outputStreamWriter != null) {
try {
outputStreamWriter.close(); //close our output stream
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
//Return the JSON response from the server.
return jsonResponse;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다