我构建了一个应用程序,它从连接到MySql服务器的php文件获取内容。它适用于最高4.0的每台设备(基于反馈) 运行我的应用程序ICS时,它会出现解析错误或无法显示列出的项目。为什么是这样? 这是代码,我从我的数据库中获取内容,使用PHP文件:
package com.fireplace.software;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
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 org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import com.google.gson.*;
import com.google.gson.reflect.TypeToken;
public class GetContentFromDBActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listofapps);
LoadData();
}
void GenData(){
ArrayList<ItemSkel> list = new ArrayList<ItemSkel>();
for(int i = 0; i< 10; ++i) {
list.add(new ItemSkel("id " + i, "label " + i, "path " + i, "description " + i, "ptype " + i));
}
Gson gson = new Gson();
String json = gson.toJson(list);
Toast.makeText(GetContentFromDBActivity.this, json, Toast.LENGTH_LONG).show();
}
public void btnLoadData(View v) {
LoadData();
}
void LoadData(){
//TextView v = (TextView)findViewById(R.id.txtStatusError);
try {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.u2worlds.com/fp/getdata.php");
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";
BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent()
)
);
String line = null;
while ((line = reader.readLine()) != null)
result += line;
Type type = new TypeToken<ArrayList<ItemSkel>>(){}.getType();
Gson g = new Gson();
final ArrayList<ItemSkel> list = g.fromJson(result, type);
ArrayList<String> stringArray = new ArrayList<String>();
for (ItemSkel item : list)
stringArray.add("" + item.getLabel());
ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, stringArray);
ListView lv = (ListView)findViewById(R.id.lwApps);
lv.setAdapter(modeAdapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
ItemSkel currentItem = list.get(position);
Intent i = new Intent(getApplicationContext(), ViewInfoActivity.class);
i.putExtra("title", currentItem.getLabel());
i.putExtra("icon", currentItem.getIcon());
i.putExtra("link", currentItem.getPath());
i.putExtra("desc", currentItem.getDescription());
i.putExtra("ptype", currentItem.getPtype());
startActivity(i);
}
});
//Toast.makeText(GetContentFromDBActivity.this, "No Error", Toast.LENGTH_LONG).show();
}
catch (Exception ex) {
//v.setText(ex.getMessage());
Toast.makeText(GetContentFromDBActivity.this, "Could not connect!", Toast.LENGTH_LONG).show();
}
}
public void updateProgress(int currentSize, int totalSize){
//Toast.makeText(this, "Packages: " + Long.toString((currentSize/totalSize)*100)+"% Complete", Toast.LENGTH_SHORT).show();
}
}
由于
答案 0 :(得分:0)
Android将在API等级NetworkOnMainThreadException(Android 3.0)及更高版本上投放11。正如其名称所示,您不能在主线程上打开网络连接。
原因是“Designing for Responsiveness”。如果您的服务器不可用或用户处于弱连接状态,则您的应用程序会滞后,因为它正在等待服务器响应。
要获得一些帮助,您可以阅读:http://saigeethamn.blogspot.com/2010/05/http-connection-using-threads-handlers.html