我的情况有点特别....我正在尝试通过tcp获取图像并将其显示在我的设备屏幕中。
请不要让我用另一种方式来获取图像,因为这是我能做到的唯一方法,而这不是我的问题。
当我逐步调试我的程序时,图像显示在我的屏幕上。但是当我在没有调配的情况下运行它时,它就不会出现了。
这是我的main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, MyActivity"
/>
<ImageView
android:id="@+id/imageview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
这是我的MyActivity.java:
public class MyActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) // Aquesta funcio es crida al començar, pero tambe cada vegada que es gira la pantalla.
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onStart(){
super.onStart();
TextView tv = (TextView) findViewById(R.id.textview);
try {
Socket s = new Socket("ip-here", port-here);
DataInputStream ins = new DataInputStream(s.getInputStream());
int bytesRead = 0;
byte[] bSize = new byte[10];
while(bytesRead < 10){
bytesRead += ins.read(bSize, 0, 10 - bytesRead);
}
String sSize = new String(bSize);
Integer size = Integer.valueOf(sSize);
byte[] pic = new byte[size];
bytesRead = 0;
while(bytesRead < size){
bytesRead += ins.read(pic, 0, size - bytesRead);
}
Bitmap bitmapimage = BitmapFactory.decodeByteArray(pic, 0, bytesRead);
ImageView image = (ImageView) findViewById(R.id.imageview);
image.setImageBitmap(bitmapimage);
tv.setText(sSize + " -> #" + size + "# -> #" + bytesRead + "#");
} catch (IOException e) {
e.printStackTrace();
tv.setText("error de IO");
}
}
}
其他信息: TCP服务器发送一个包含图像大小的10字符串(在基数10中)。然后是jpg格式的整个图像。
正如你所看到的,我把一个文本框告诉我发生了什么,这没关系。即使我运行它,它说他得到了整个图像,但它只是没有出现......
我错过了什么吗?也许我不应该将此代码放在onStart()方法中?
谢谢你, 维克托