Java 如何在android中使用HttpURLConnection启用缓存?
如何在使用java的android中使用HttpURLConnection启用缓存 这是我的源代码:Java 如何在android中使用HttpURLConnection启用缓存?,java,android,caching,httpurlconnection,Java,Android,Caching,Httpurlconnection,如何在使用java的android中使用HttpURLConnection启用缓存 这是我的源代码: 公共类GetMenuData扩展异步任务{ 字符串服务器响应; @凌驾 受保护的字符串背景(字符串…字符串){ 网址; HttpURLConnection-urlConnection=null; 试一试{ url=新url(字符串[0]); urlConnection=(HttpURLConnection)url.openConnection(); urlConnection.setReques
公共类GetMenuData扩展异步任务{
字符串服务器响应;
@凌驾
受保护的字符串背景(字符串…字符串){
网址;
HttpURLConnection-urlConnection=null;
试一试{
url=新url(字符串[0]);
urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod(“GET”);
setRequestProperty(“内容类型”、“应用程序/json”);
urlConnection.setDoInput(true);
int responseCode=urlConnection.getResponseCode();
if(responseCode==HttpURLConnection.HTTP\u确定){
server_response=readStream(urlConnection.getInputStream());
Log.v(“CatalogClient”,服务器响应);
}
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
试一试{
JSONObject res=新的JSONObject(服务器响应);
//获取json数组
JSONArray Jarray=res.getJSONArray(“菜单”);
for(int i=0;i
主要活动
public类MainActivity扩展了AppCompatActivity{
私人摊位摊位;
专用工具栏适配器工具栏适配器;
私有视图寻呼机mViewPager;
private ArrayList itemsToolbar_菜单;
私人部门SPAGERAAdapter MSECTIONSPAGERAAdapter;
私人GetMenuData iData;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
itemsToolbar_菜单=新建ArrayList();
mviewpage=findviewbyd(R.id.container);
tabLayout=findviewbyd(R.id.tabs);
//请求数据
iData=新的GetMenuData();
执行(URL_菜单);
}
它工作正常,但当我在emulator上运行应用程序时,没有互联网连接,它会给我这个错误
java.lang.NullPointerException:尝试调用虚拟方法'int java.lang.String.length()'在空对象引用上欢迎使用SO-您应该发布完整的堆栈跟踪,以便任何人能够帮助您,以及堆栈跟踪中的任何代码您没有internet,因此您没有得到导致当前错误的json响应
Jarray.length()
为空。您的问题在术语cached
上无法解决,您需要存储对sqlite数据库的json响应,以便在脱机时再次使用它。我还建议您仅使用asynctask的onPostExecute()进行汇总操作(小操作),并将长线程操作放在doInBackground()中(例如:您的for循环)。在Android http类不推荐使用的情况下,我建议使用改型、OKhttp等
public class GetMenuData extends AsyncTask<String , Void ,String> {
String server_response;
@Override
protected String doInBackground(String... strings) {
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(strings[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("Content-Type","application/json");
urlConnection.setDoInput(true);
int responseCode = urlConnection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
server_response = readStream(urlConnection.getInputStream());
Log.v("CatalogClient", server_response);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
JSONObject res = new JSONObject(server_response);
//get json array
JSONArray Jarray = res.getJSONArray("menu");
for (int i = 0; i < Jarray.length(); i++) {
JSONObject object = Jarray.getJSONObject(i);
MenuItem n = new MenuItem(
object.getInt("ID"),
object.getString("title"),
object.getString("image"));
Log.e("TAG", "" + n.getId());
itemsToolbar_Menu.add(n);
}
mViewPager.setAdapter(mSectionsPagerAdapter);
setupTabLayout(toolbarAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ToolbarAdapter toolbarAdapter;
private ViewPager mViewPager;
private ArrayList<MenuItem> itemsToolbar_Menu;
private SectionsPagerAdapter mSectionsPagerAdapter;
private GetMenuData iData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
itemsToolbar_Menu = new ArrayList<>();
mViewPager = findViewById(R.id.container);
tabLayout = findViewById(R.id.tabs);
//Request Data
iData = new GetMenuData();
iData.execute(URL_MENU);
}