一个很奇怪的问题,了解一下吧?

neweast0183 2018-04-18 11:19:00
我是一个新手,目前在跟着教材写程序这个阶段。最近在学http网络编程。在这样一个小程序上栽倒了。

为了测试我把程序简化了。布局文件只有一个TextView。创建了一个用于获取某个网址返回的字符串的工具类。主要是通过Connection的getInputStream方法获取输入流,再通过BufferedReader读取到一个字符串。然后在一个继承了AsyncTask的内部类的doInBackground方法里调用该工具类的相关方法返回一个字符串,在onPostExecute方法里通过TextView的setText方法显示该字符串。在onCreate方法中调用该内部类的execute方法。写完代码,发布apk文件。安装到手机上,界面一片空白。没有显示应有的信息。因为我的eclipse的模拟器有问题奇慢无比。我用网易的mumu手机模拟器运行发现程序是可以显示出正确的信息的。再次安装到手机上依旧一片空白。不知哪位大神遇到过类似的问题。还请不吝赐教,把这个绝望的人从坑里拉出来吧。
...全文
1377 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
neweast0183 2018-04-23
  • 打赏
  • 举报
回复
原因找到了,是网址被重定向了。从报头中提取重定向的网址ok
usecf 2018-04-20
  • 打赏
  • 举报
回复
会不会你手机上有一些seandroid的权限问题,所以显示不出来
usecf 2018-04-20
  • 打赏
  • 举报
回复
真机打log分析下
水手辛巴 2018-04-20
  • 打赏
  • 举报
回复
首先是要学会自己找问题,当程序编译通过时但是运行不满足预期时该怎么做。第一是学会看日志信息,第二是学会自己打印日志。
neweast0183 2018-04-20
  • 打赏
  • 举报
回复
刚发现是系统版本问题,安装在安卓4.4.4系统的手机上能显示正确的信息。我的手机是5.1.1的系统,可要改哪个地方呢?
neweast0183 2018-04-20
  • 打赏
  • 举报
回复
我的手机是VIVO Y51全网通版。
neweast0183 2018-04-20
  • 打赏
  • 举报
回复
我把代码附上,我是用fragment托管activity。并不是非得这样,习惯了。
activity_thread_demo.xml
<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">


</FrameLayout>

thread_demo_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="test"/>

<Button android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="test"/>
</LinearLayout>

SingleFragmentActivity.java这个类用于获取FragmentManager并调用相应的Fragment
package com.lili.android.threaddemo;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.widget.ListView;

public abstract class SingleFragmentActivity extends FragmentActivity {
protected abstract Fragment createFragment();
protected int getLayoutRes(){
return R.layout.activity_thread_demo;
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(getLayoutRes());
FragmentManager fm=getSupportFragmentManager();
Fragment ft=fm.findFragmentById(R.id.fragmentContainer);
if(ft==null){
ft=createFragment();
fm.beginTransaction().add(R.id.fragmentContainer, ft).commit();
}

}
}

ThreadDemoActivity.java这个是被托管的Activity
package com.lili.android.threaddemo;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Menu;
import android.view.MenuItem;


public class ThreadDemoActivity extends SingleFragmentActivity {

protected Fragment createFragment(){
return new ThreadDemoFragment();
}

}

ThreadDemoFragment.java 这个类是托管activity的fragment类,程序的主要功能都是这个类实现的.
package com.lili.android.threaddemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class ThreadDemoFragment extends Fragment {
TextView textView;

public void onCreate(Bundle arg0){
super.onCreate(arg0);
new ThreadTest1().execute();
}
public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle b){
View v=inflater.inflate(R.layout.thread_demo_fragment, parent, false);
textView=v.findViewById(R.id.textView);

return v;
}

private class ThreadTest1 extends AsyncTask<Void,Void,String>{
public String doInBackground(Void... params){
String tmp="initial";
try{
tmp=new NetInfoFetcher().getURL("http://www.baidu.com");
}catch(IOException e){

}
return tmp;
}
public void onPostExecute(String arg0){
textView.setText(arg0);
}
}
}

NetInfoFetcher.java这个类是工具类,实现获取某个网址的返回字符串

package com.lili.android.threaddemo;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class NetInfoFetcher {
public String test(){
return "这是测试方法";
}
public String getURL(String url)throws IOException{
URL tmpURL=new URL(url);
HttpURLConnection conn=(HttpURLConnection)tmpURL.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(true);
conn.connect();
String resultData="";
try{
//ByteArrayOutputStream out=new ByteArrayOutputStream();
InputStream in=conn.getInputStream();


InputStreamReader inReader=new InputStreamReader(in);
BufferedReader buffReader=new BufferedReader(inReader);
String result="";
while((result=buffReader.readLine())!=null){
resultData=resultData+result+"\n";
}

}catch(IOException e){
resultData="erro";}

finally{

conn.disconnect();
}
return resultData;
}


}

权限我是在AndroidManifest.xml文件中加入
<uses-permission android:name="android.permission.INTERNET"/>
这是电脑上的手机模拟器运行效果

这是手机运行效果

按钮是没用的,我本想加入别的功能,结果这个测试不过去。也就没加。
键盘舞者113 2018-04-19
  • 打赏
  • 举报
回复
引用 2 楼 neweast0183 的回复:
没人感兴趣还是没人知道怎么回事呢?
首先你把项目上传,链接贴出来,还有就是如果要做Android开发,一般都是使用Android Studio
neweast0183 2018-04-19
  • 打赏
  • 举报
回复
没人感兴趣还是没人知道怎么回事呢?
r00_a2lBUR 2018-04-19
  • 打赏
  • 举报
回复
把代码贴上来看看~~~~~~~~~~
kingiis 2018-04-19
  • 打赏
  • 举报
回复
欢迎入坑,下载个android studio ,启动新项目, 熟悉下 gradle ,检查下你的清单文件。再说实现功能把,打好基础把,少年!你可以的
cms-Cloud后台管理系统 cms-Cloud 基于Spring Boot、Spring Cloud & Alibaba、OAuth2的前后端分离的后台管理系统,内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。核心技术前端技术栈 ES6、vue、vuex、vue-router、vue-cli、axios、element-ui后端技术栈 Spring Boot、Spring Cloud & Alibaba、OAuth2系统需求JDK >= 1.8MySQL >= 5.5Maven >= 3.0主要特性1. 完全响应式布局(支持电脑、平板、手机等所有主流设备)2. 强大的一键生成功能(包括控制器、模型、视图、菜单等)3. 支持多数据源,简单配置即可实现切换。4. 支持按钮及数据权限,可自定义部门数据权限。5. 对常用js插件进行二次封装,使js代码变得简洁,更加易维护6. 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击7. Maven多项目依赖,模块及插件分项目,尽量松耦合,方便模块升级、增减模块。8. 国际化支持,服务端及客户端支持9. 完善的日志记录体系简单注解即可实现技术选型1、系统环境Java EE 8Servlet 3.0Apache Maven 32、主框架Spring Boot 2.2Spring Cloud Hoxton.SR3Spring Framework 5.1Spring Security 5.13、持久层Apache MyBatis 3.4Alibaba Druid 1.14、视图层Vue 2.6Axios 0.18Element UI 2.11内置功能(1) 用户管理:用户是系统操作者,该功能主要完成系统用户配置。(2) 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。(3) 岗位管理:配置系统用户所属担任职务。(4) 菜单管理:配置系统菜单,操作权限,按钮权限标识等。(5) 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。(6) 字典管理:对系统中经常使用的一些较为固定的数据进行维护。(7) 参数管理:对系统动态配置常用参数。(8) 通知公告:系统通知公告信息发布维护。(9) 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。(10) 登录日志:系统登录日志记录查询包含登录异常。(11) 在线用户:当前系统中活跃用户状态监控。(12) 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。(13) 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。(14) 系统接口:根据业务代码自动生成相关的api接口文档。(15) 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。(16) 在线构建器:拖动表单元素生成相应的HTML代码。(17) 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 环境部署准备工作JDK >= 1.8 (推荐1.8版本)Mysql >= 5.5.0 (推荐5.7版本)Redis >= 3.0Maven >= 3.0Node >= 10nacos >= 1.1.0sentinel >= 1.6.0运行系统因为本项目是前后端分离的,所以需要前后端都启动好,才能进行访问。后端运行1、导入cms到Eclipse,菜单 File -> Import,然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,选择工作目录,然后点击 Finish 按钮,即可成功导入Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)2、创建数据库cms-cloud并导入数据脚本cms.sql(必须),quartz.sql(可选)3、创建数据库cms-config并导入数据脚本cms_config.sql(必须)4、配置nacos持久化,修改conf/application.properties文件,增加支持mysql数据源配置。# db mysqlspring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://localhost:3306/cms-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user=rootdb.password=password5、打开运行基础模块(启动没有先后顺序)CmsGatewayApplication (网关模块 必须)CmsAuthApplication (认证模块 必须)CmsSystemApplication (系统模块 必须)CmsMonitorApplication (监控中心 可选)CmsGenApplication (代码生成 可选)CmsJobApplication (定时任务 可选)CmsFileApplication (文件服务 可选)前端运行# 进入项目目录cd cms-ui# 安装依赖npm install# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。npm install --registry=https://registry.npm.taobao.org 本地开发 启动项目npm run dev打开浏览器,输入:http://localhost:80 (默认账户 admin/admin123)若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功提示前端安装完node后,最好设置下淘宝的镜像源,不建议使用cnpm(可能会出现奇怪问题)部署系统因为本项目是前后端分离的,所以需要前后端都部署好,才能进行访问后端部署bin/package.bat 在项目的目录下执行然后会在项目下生成 target文件夹包含 war 或jar1、jar部署方式使用命令行执行:java –jar xxxx.jar 或者执行脚本:bin/run.bat2、war部署方式pom.xml packaging修改为war 放入tomcat服务器webapps提示SpringBoot去除内嵌tomcat前端部署当项目开发完毕,只需要运行一行命令就可以打包你的应用# 打包正式环境npm run build:prod# 打包预发布环境npm run build:stage构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js 、***.css、index.html 等静态文件。通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。环境变量所有测试环境或者正式环境变量的配置都在 .env.development (opens new window)等 .env.xxxx文件中。它们都会通过 webpack.DefinePlugin 插件注入到全局。常见问题如果使用Mac 需要修改application.yml文件路径profile如果使用Linux 提示表不存在,设置大小写敏感配置在/etc/my.cnf 添加lower_case_table_names=1,重启MYSQL服务如果提示当前权限不足,无法写入文件请检查profile是否可读可写,或者无法访问此目录

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧